/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.uniceub.fsw.tutorial.dao;
import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.tutorial.vo.CursoVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Gabriel
 */

public class CursoDAO extends BaseDAO<CursoVO> {

     @Override
     public void inserir(CursoVO entidade) {

            ConstrutorSQL query = new ConstrutorSQL();

            query.append("INSERT INTO TB_CURSO(NO_CURSO, CD_INSTRUTOR)");
            query.append("VALUES (?, ?)");

            List<?> parametros = criarParametros(entidade.getNoCurso(), entidade.getCdInstrutor());

            Integer idGerado = (Integer) executarInsercao(query.toString(), parametros);

            entidade.setIdCurso(idGerado);
        }
    @Override
    public void alterar(CursoVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("UPDATE TB_CURSO SET NO_CURSO = ?,");
        query.append("CD_INSTRUTOR = ?");
        query.append("WHERE ID_CURSO = ?");

        List<?> parametros = criarParametros(entidade.getNoCurso(), entidade.getCdInstrutor(), entidade.getIdCurso());

        executarAlteracao(query.toString(), parametros);
    }
    @Override
    public void excluir(CursoVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("DELETE FROM TB_CURSO");
        query.append("WHERE ID_CURSO = ?");

        executarAlteracao(query.toString(), criarParametros(entidade.getIdCurso()));
    }
    @Override
    public CursoVO consultarPorId(Serializable id) {

        CursoVO curso = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_CURSO T WHERE T.ID_CURSO = ?");

        curso = consultarUm(query.toString(), criarParametros(id));

        return curso;
    }
    @Override
    public List<CursoVO> consultarPorExemplo(CursoVO exemplo) {

        List<CursoVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_CURSO T WHERE 1=1");

        mapearQueryParaExemplo(query, exemplo);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }
    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, CursoVO exemplo) {

        if (exemplo.getNoCurso() != null && exemplo.getNoCurso().trim().length() > 0) {
            query.append("AND T.NO_CURSO LIKE ?");
            adicionarParametro("%" + exemplo.getNoCurso() + "%");
        }

  
        if (exemplo.getCdInstrutor() != null) {
            query.append("AND T.CD_INSTRUTOR = ?");
            adicionarParametro(exemplo.getCdInstrutor());
        }
    }

    @Override
    protected CursoVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        CursoVO curso = new CursoVO();
        
        curso.setIdCurso(rs.getInt("ID_CURSO"));
        curso.setNoCurso(rs.getString("NO_CURSO"));
        curso.setCdInstrutor(new Integer(rs.getInt("CD_INSTRUTOR")));

        return curso;
    }


    
}
